//============================================================================================
/**
 * @file	bag.h
 * @brief	バッグ画面処理 外部参照処理
 * @author	Hiroyuki Nakamura
 * @date	05.08.03
 */
//============================================================================================
#ifndef BAG_H
#define BAG_H
#undef GLOBAL
#ifdef BAG_H_GLOBAL
#define GLOBAL	/*	*/
#else
#define GLOBAL	extern
#endif


//============================================================================================
//	定数定義
//============================================================================================
#include "application/bag_def.h"
#include "itemtool/myitem.h"
#include "system/keytouch_status.h"

typedef struct _BAG_DATA	BAG_DATA;

enum {
	BAG_MODE_FIELD = 0,
	BAG_MODE_ITEMSET,
	BAG_MODE_ITEMSALE,
	BAG_MODE_KINOMI,
	BAG_MODE_MIX,
	BAG_MODE_MIX_SIO,
	BAG_MODE_N_PLANTER,		// 木の実プランター用
};

enum {
	BAG_RET_USE = 0,
	BAG_RET_TAG,
	BAG_RET_ITEMSET,		// メニュー「もたせる」
	BAG_RET_ENTER,			// メニュー「けってい」
	BAG_RET_POKEITEMSET,	// ポケモンリスト「もたせる」
	BAG_RET_CANCEL
};



//============================================================================================
//	グローバル変数
//============================================================================================
#ifndef BAG_H_GLOBAL
GLOBAL const PROC_DATA BagProcData;		// プロセス定義データ
#endif


//============================================================================================
//	プロトタイプ宣言
//============================================================================================

//--------------------------------------------------------------------------------------------
/**
 * バッグ画面のデータ領域確保
 *
 * @param	mode	メモリ取得モード
 *
 * @return	確保した領域のアドレス
 */
//--------------------------------------------------------------------------------------------
GLOBAL BAG_DATA * BagSystemDataAlloc( u8 mode );

//--------------------------------------------------------------------------------------------
/**
 * バッグ画面のデータサイズ取得
 *
 * @param	none
 *
 * @return	データサイズ
 */
//--------------------------------------------------------------------------------------------
GLOBAL u32 BagSystemDataSizeGet(void);

//--------------------------------------------------------------------------------------------
/**
 * バッグ画面の初期ページ設定
 *
 * @param	dat		データ設定場所
 * @param	page	初期ページ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BAG_InitPageSet( BAG_DATA * dat, u8 page );

//--------------------------------------------------------------------------------------------
/**
 * バッグ画面のモード設定
 *
 * @param	dat		データ設定場所
 * @param	mode	バッグ画面の役割
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BAG_ModeSet( BAG_DATA * dat, u8 mode );

//--------------------------------------------------------------------------------------------
/**
 * バッグ画面の初期データ作成
 *
 * @param	dat			データ設定場所
 * @param	sv			セーブデータ
 * @param	mode		バッグ画面の役割
 * @param	cur			カーソル記憶場所
 * @param	kt_status	キー・タッチステータス
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BAG_SysDataSet( BAG_DATA * dat, SAVEDATA * sv, u8 mode, void * cur, KEYTOUCH_STATUS *kt_status );

//--------------------------------------------------------------------------------------------
/**
 * ポケットデータ作成
 *
 * @param	dat		バッグ画面のデータ
 * @param	item	参照するアイテムデータ
 * @param	type	ポケットタイプ
 * @param	poke	ポケット番号
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BagPocketDataMake( BAG_DATA * dat, MINEITEM * item, u8 type, u8 poke );

//--------------------------------------------------------------------------------------------
/**
 * 自転車フラグセット
 *
 * @param	dat		バッグ画面のデータ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BagCycleFlagSet( BAG_DATA * dat );

//--------------------------------------------------------------------------------------------
/**
 * アイテム使用チェックワークセット
 *
 * @param	dat		バッグ画面のデータ
 * @param	icwk	アイテム使用チェックワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void Bag_ItemUseCheckSet( BAG_DATA * dat, void * icwk );

//--------------------------------------------------------------------------------------------
/**
 * アイテムを使用したポケモン位置設定
 *
 * @param	dat			バッグ画面のデータ
 * @param	use_poke	使用したポケモン位置
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void Bag_UsePokeSet( BAG_DATA * dat, u8 use_poke );

//--------------------------------------------------------------------------------------------
/**
 * マップモード設定
 *
 * @param	dat			バッグ画面のデータ
 * @param	map_mode	マップモード
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BAG_SysMapModeSet( BAG_DATA * dat, u16 map_mode );

//--------------------------------------------------------------------------------------------
/**
 * データ取得：現在のポケット番号
 *
 * @param	dat		バッグ画面のデータ
 *
 * @return	現在のポケット番号
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 BagSysNowPocketNumGet( BAG_DATA * dat );

//--------------------------------------------------------------------------------------------
/**
 * データ取得：バッグ画面の役割
 *
 * @param	dat		バッグ画面のデータ
 *
 * @return	バッグ画面の役割
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 BagSysModeGet( BAG_DATA * dat );

//--------------------------------------------------------------------------------------------
/**
 * データ取得：バッグで取得したアイテム
 *
 * @param	dat		バッグ画面のデータ
 *
 * @return	バッグで取得したアイテム
 */
//--------------------------------------------------------------------------------------------
GLOBAL u16 BagSysReturnItemGet( BAG_DATA * dat );

//--------------------------------------------------------------------------------------------
/**
 * 前回アイテムを使用したポケモン位置を取得
 *
 * @param	dat			バッグ画面のデータ
 *
 * @return	アイテムを使用したポケモン位置
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 Bag_UsePokeGet( BAG_DATA * dat );

//--------------------------------------------------------------------------------------------
/**
 * データ取得：バッグの戻り値
 *
 * @param	dat		バッグ画面のデータ
 *
 * @return	バッグの戻り値
 */
//--------------------------------------------------------------------------------------------
GLOBAL u16 BagSysReturnModeGet( BAG_DATA * dat );

//--------------------------------------------------------------------------------------------
/**
 * データ取得：カーソル位置、スクロールカウンタ
 *
 * @param	dat		バッグ画面のデータ
 * @param	poke	ポケット番号
 * @param	cur		カーソル位置
 * @param	scr		スクロールカウンタ
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BagCursorPosGet( BAG_DATA * dat, u8 poke, u16 * cur, u16 * scr );

//--------------------------------------------------------------------------------------------
/**
 * データ取得：売った数カウンタ（冒険ノート用）
 *
 * @param	dat		バッグ画面のデータ
 *
 * @return	現在のポケット番号
 */
//--------------------------------------------------------------------------------------------
GLOBAL u8 BagSysSaleCntGet( BAG_DATA * dat );

//--------------------------------------------------------------------------------------------
/**
 * プロセス関数：初期化
 *
 * @param	proc	プロセスデータ
 * @param	seq		シーケンス
 *
 * @return	処理状況
 */
//--------------------------------------------------------------------------------------------
GLOBAL PROC_RESULT BagProc_Init( PROC * proc, int * seq );

//--------------------------------------------------------------------------------------------
/**
 * プロセス関数：メイン
 *
 * @param	proc	プロセスデータ
 * @param	seq		シーケンス
 *
 * @return	処理状況
 */
//--------------------------------------------------------------------------------------------
GLOBAL PROC_RESULT BagProc_Main( PROC * proc, int * seq );

//--------------------------------------------------------------------------------------------
/**
 * プロセス関数：終了
 *
 * @param	proc	プロセスデータ
 * @param	seq		シーケンス
 *
 * @return	処理状況
 */
//--------------------------------------------------------------------------------------------
GLOBAL PROC_RESULT BagProc_End( PROC * proc, int * seq );



//--------------------------------------------------------------------------------------------
/**
 * バッグ内で使用されるアイテムのメッセージセット
 *
 * @param	sv		セーブデータ
 * @param	buf		メッセージ展開場所
 * @param	item	アイテム番号
 * @param	heap	ヒープID
 *
 * @return	"TRUE = バッグ内で使用されるアイテム"
 * @return	"FALSE = それ以外"
 */
//--------------------------------------------------------------------------------------------
GLOBAL BOOL BAG_ItemUseMsgSet( SAVEDATA * sv, STRBUF * buf, u16 item, u32 heap );


//--------------------------------------------------------------------------------------------
/**
 * アイテム使用エラーメッセージセット
 *
 * @param	myst	プレイヤーデータ
 * @param	buf		メッセージ展開場所
 * @param	item	アイテム番号
 * @param	err		エラーID
 * @param	heap	ヒープID
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
GLOBAL void BAG_ItemUseErrorMsgSet( void * myst, STRBUF * buf, u16 item, u32 err, u32 heap );



#undef GLOBAL
#endif	/* BAG_H */